package java_thinking.unit_21._21_4;

import net.jcip.annotations.ThreadSafe;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Desc:   4-15     通过扩展类功能-客户端加锁实现线程安全的“若没有则添加”功能
 * @author: cww
 * @DateTime: 2019-06-03 22:17
 */
@ThreadSafe
public class SafeListHelper<E> {
    /**
     * 要使用客户端来对使用的对象进行加锁，必须知道对象X使用的是哪一个锁
     */
    public List<E> list = Collections.synchronizedList(new ArrayList<>());
    public boolean putIfAbsent(E x) {
        synchronized (list) {
            boolean absent = !list.contains(x);
            if (absent) {
                list.add(x);
            }
            return absent;
        }
    }
}
